
#include <iostream>
#include <signal.h>
#include "../comm/httplib.h"
#include "./oj_control.hpp"
using namespace httplib;
using namespace ns_control;
static Control *ctrl_p=nullptr;

void Recovery(int signo)
{
   ctrl_p->RecoverMachine();
}

int main()
{
        //收到信号"\"上线主机
        signal(SIGQUIT,Recovery);
        // 用户请求的服务路由功能
        Server svr;
        Control ctrl;
        ctrl_p=&ctrl;
        // 获取所有的题目列表
        svr.Get("/all_questions", [&ctrl](const Request &req, Response &resp)
                { 
                std::string html;
                ctrl.AllQuestions(&html);  
                resp.set_content(html, "text/html;charset=utf-8"); });

        // 用户根据题目编号,获取题目的内容
        //  (\d+)正则匹配
        svr.Get(R"(/questions/(\d+))", [&ctrl](const Request &req, Response &resp)
                {
      std::string number =req.matches[1];//
      std::string html;
      ctrl.OneQuestion(number,&html);
      resp.set_content(html,"text/html;charset=utf-8"); });

        // 用户提交代码 进行判题
        svr.Post(R"(/judge/(\d+))", [&ctrl](const Request &req, Response &resp)
                 {
                         std::string number = req.matches[1]; // 题号
                         std::string result_json;
                         ctrl.Judge(number, req.body, &result_json);
                         resp.set_content(result_json, "application/json;charset=utf-8");
                         // resp.set_content("判断指定题目:"+number,"text/plain;charset=utf-8");
                 });

        svr.set_base_dir("./wwwroot");
        svr.listen("0.0.0.0", 8080); // 允许任何IP
        return 0;
}
